/**
 * Copyright (c) 2020 Coder League
 * All rights reserved.
 *
 * File：SystemConfigService.java
 * History:
 *         2020年12月19日: Initially created, Chrise.
 */
package club.coderleague.cfss.service.systemconfig;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import club.coderleague.cfss.cache.CacheManager;
import club.coderleague.cfss.dao.SystemConfigDao;
import club.coderleague.cfss.domain.beans.OperateResult;
import club.coderleague.cfss.domain.beans.SystemConfig;
import club.coderleague.cfss.domain.entities.Systemconfigs;
import club.coderleague.cfss.domain.enums.EntityState;

/**
 * 系统配置服务。
 * @author Chrise
 */
@Service
public class SystemConfigService {
	@Autowired
	private SystemConfigDao scDao;
	@Autowired
	private CacheManager cacheManager;
	
	/**
	 * 查询缓存封装类。
	 * @author Chrise 2020年12月19日
	 * @return 缓存封装类对象。
	 */
	public SystemConfig queryCacheBean() {
		return this.scDao.queryCacheBean();
	}
	
	/**
	 * 获取系统配置。
	 * @author Chrise 2020年12月19日
	 * @return 系统配置对象。
	 */
	public Systemconfigs getSystemConfig() {
		return this.scDao.findByEntitystate(EntityState.VALID.getValue());
	}
	
	/**
	 * 修改系统配置。
	 * @author Chrise 2020年12月20日
	 * @param systemconfigs 系统配置对象。
	 * @return 修改结果。
	 */
	public OperateResult updateSystemConfig(Systemconfigs systemconfigs) {
		Systemconfigs systemconfigsOld = this.scDao.findByEntitystate(EntityState.VALID.getValue());
		if (systemconfigsOld != null) {
			systemconfigsOld.setVercodetimeout(systemconfigs.getVercodetimeout());
			systemconfigsOld.setWxappid(systemconfigs.getWxappid());
			systemconfigsOld.setWxappkey(systemconfigs.getWxappkey());
			systemconfigsOld.setWxvertoken(systemconfigs.getWxvertoken());
			systemconfigsOld.setWxverfile(systemconfigs.getWxverfile());
			systemconfigsOld.setWxwelcome(systemconfigs.getWxwelcome());
			systemconfigsOld.setAyappid(systemconfigs.getAyappid());
			systemconfigsOld.setAyappkey(systemconfigs.getAyappkey());
			systemconfigsOld.setAysign(systemconfigs.getAysign());
		} else {
			Systemconfigs systemconfigsNew = new Systemconfigs(EntityState.VALID.getValue(), 
				systemconfigs.getVercodetimeout(), systemconfigs.getWxappid(), systemconfigs.getWxappkey(), 
				systemconfigs.getWxvertoken(), systemconfigs.getWxverfile(), systemconfigs.getWxwelcome(), 
				systemconfigs.getAyappid(), systemconfigs.getAyappkey(), systemconfigs.getAysign());
			this.scDao.save(systemconfigsNew);
		}
		
		// 刷新缓存配置
		this.refreshCacheConfig();
		
		OperateResult result = new OperateResult(true, 0, "操作成功！");
		return result;
	}
	
	/**
	 * 刷新缓存配置。
	 * @author Chrise 2020年12月19日
	 */
	private void refreshCacheConfig() {
		SystemConfig systemConfig = this.queryCacheBean();
		
		// 检查缓存
		if(this.cacheManager.exits(SystemConfig.CACHE_KEY, false)) {
			Object cache = this.cacheManager.getObject(SystemConfig.CACHE_KEY, false);
			if (systemConfig.equals(cache)) return;
		}
		
		// 更新系统配置缓存
		this.cacheManager.setObject(SystemConfig.CACHE_KEY, systemConfig);
	}
}
